﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace XAPI.Domain
{
    /// <summary>
    /// Description -
    /// A Group represents a collection of Agents and can be used in most of the same situations an Agent 
    /// can be used. There are two types of Groups, anonymous and identified.
    /// 
    /// Requirements -
    /// • A system consuming Statements MUST consider each anonymous Group distinct even if it has an 
    /// identical set of members.
    /// • A system consuming Statements MUST NOT assume that Agents in the 'member' property 
    /// comprise an exact list of Agents in a given anonymous or identified Group.
    /// 
    /// For Anonymous 
    /// Groups
    /// • An anonymous Group MUST include a 'member' property listing constituent Agents.
    /// • An anonymous Group MUST NOT contain Group Objects in the 'member' property.
    /// • An anonymous Group MUST NOT include any Inverse Functional Identifiers.
    /// For Identified 
    /// Groups
    /// • An identified Group MUST include exactly one (1) Inverse Functional Identifier.
    /// • An identified Group MUST NOT contain Group Objects in the 'member' property.
    /// • An identified Group SHOULD NOT use Inverse Functional Identifiers that are also used as Agent 
    /// identifiers.
    /// • An identified Group MAY include a 'member' property listing constituent Agents.
    /// Details An Anonymous Group is used describe a cluster of people where there is no ready identifier for this 
    /// cluster, e.g. an ad hoc team.
    /// </summary>
    public class Group : InverseFunctionalIdentifier
    {

        /// <summary>
        /// The members of this Group. Required
        /// </summary>
        public List<Agent> member { get; set; }
    }
}